Representableのinstance例: (->) r
関数型(->) rのinstanceはかなり単純なものになる
つまり(->) Integerに対してinstanceを定義し、(->) Integer Intを見てみる
code:hs
index :: (Integer -> Int) -> Integer -> Int
tabulate :: (Integer -> Int) -> (Integer -> Int)
positions :: Integer -> Integer
型から見てもわかるように、それぞれ以下の関数に対応する
code:hs
index = ($)
tabulate = id
positions = id
intexは、
与えられた関数(Integer -> Int)に対して、
Integerを与えたもの
つまり、関数適用
tabulateは、
与えられた関数をそのまま返す
つまり、恒等関数
positionsは、
与えられた値をそのまま返す
つまり、恒等関数
code:hs
instance Representable ((->) r) where
type Rep ((->) r) = r
index = ($)
positions = id
tabulate = id
indexをidで定義する例も見かけたが、同じ意味である id :: a -> a
($) :: (a -> b) -> a -> b
code:ghci
index (*10) 2
20
tabulate (*10) 2
20
positions (*10) 2
20